package com.jason.service;

import com.jason.mapper.EbProductMapper;
import com.jason.model.EbProduct;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashSet;
import java.util.Set;

@Service
public class ProductService {
    @Resource
    private EbProductMapper ebProductMapper;

    public EbProduct detail(int pid){
        EbProduct ebProduct=ebProductMapper.selectById(pid);
        return ebProduct;
    }

    public void addCar(int epId, HttpServletRequest request) {
        //1.TODO 调用mapper获取商品对象
        EbProduct newProduct = ebProductMapper.selectById(epId);
        //2.TODO 创建购物车(session)
        HttpSession session  = request.getSession();

        //3.TODO 得到集合？（1.创建 2.从sesion获取）  list 元素不唯一 Set 元素唯一
        Set<EbProduct> set = null;
        //3.1 先从购物车中获取袋子
        set = (Set<EbProduct>)session.getAttribute("car");
        if(set==null){
            set=new HashSet<>();
        }
        //4.TODO 将商品放入集合----List去重问题
        //4.1. 判断set中是否存在新加入购物车的商品
//        list.add(newProduct); //导致同一个商品出现多次 要求：同一个商品出现一次，数量为3
        //标记法--->查找问题
        boolean flag = false;
        for ( EbProduct oldEbProduct :set){
            //判断set中是否存在新加入购物车的商品
            if(newProduct.getEpId().equals(oldEbProduct.getEpId())){//集合中存在
                oldEbProduct.setCount(oldEbProduct.getCount()+1);
                flag=true;
                break;
            }
        }
        //4.2.将新添加的商品加入set集合
        if(!flag) {
            set.add(newProduct);//必须实体类重写hashcode方法和equals方法
        }
        //5.TODO 将集合放到购物车
        session.setAttribute("car",set);

    }
}
